import { Module } from '@nestjs/common';
import { APP_GUARD } from '@nestjs/core';
import { JwtModule } from '@nestjs/jwt';
import { UserModule } from '../user/user.module';
import { AuthController } from './auth.controller';
import { AuthGuard } from './auth.guard';
import { JWT_SECRET_KEY } from './auth.jwt.secret';
import { AuthService } from './auth.service';

@Module({
  // 1.引入UserService依赖 -> 2.在USerService中要exports该模块 -> 3.在authService中使用该依赖 -> 4.后续逻辑
  imports: [
    UserModule, // 引用注入要使用到的userService模块，就可以在authService中使用
    JwtModule.register({
      // 安装 npm i -S @nestjs/jwt，用于生成token
      global: true, // 全局的模块
      secret: JWT_SECRET_KEY, // 私钥，只在服务端有
      signOptions: {
        expiresIn: 30 * 24 * 60 * 60 + 's', // 过期时间 30天 * 24h
      },
    }),
  ],
  controllers: [AuthController],
  providers: [
    AuthService,
    // 1.注册请求守卫 -> 2.在AuthGuard中处理守卫逻辑 -> 3.注册注解Public表示公共接口 -> 4.在路由守卫处理无需拦截标识为Public的接口
    {
      provide: APP_GUARD, // 路由守卫
      useClass: AuthGuard,
    },
  ],
})
export class AuthModule {}
